Skip to main content

UART通信

我们的电脑怎么跟单片机通信呢?

up的视频讲解:

1 UART通信 原理

1.1 单片机常见通信协议

USART(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步收发器

  • USART 是芯片内部的一个外设硬件

  • UART 是USART外设配置的异步模式

  • UART通信时串口通信的一种经典的方式, 所以有时候也直接叫它串口通信

单片机常见通信协议

1.2 UART通信模式

UART通信模式

  • TX相当于人的嘴巴 用于发出信号

  • RX相当于人的耳朵 用于接收信号

  • TX与RX要交叉连接, 就像对方说话的声音应该是传到对方的耳朵而不是嘴巴

  • 电平标准不一致时,需要加电平转换芯片

全双工 半双工 单工通讯

全双工 半双工 单工通讯 Uart是半双工通信: 同一时刻, 双方只有一半的收发功能(即只能发送或接收)

1.2 TTL电平标准

不同单片机设备在通信的时候, 需要提前规定多少伏电压为逻辑1, 多少伏电压为逻辑0, 这就形成了通用的电平标准

  • 串口通信最常见电平标准有:TTL、RS‑232、RS‑485

  • TTL 电平全称:Transistor‑Transistor Logic 晶体管->晶体管 逻辑

  • TTL 电平特点: 成本最低,所有 MCU 串口默认都是 TTL

  • 3.3V TTL(STM32 等主流) 逻辑 1≈3.3V 逻辑 0≈0V

  • 5V TTL(51等) 逻辑 1+2.4V ~ +5V 逻辑 00V ~ +0.8V

1.3 波特率

串口通信的速率,串口一般是异步通信,没有时钟线控制,所以需要双方确定一个通信速率(波特率)

  • 单位:波特(Baud)意思:每秒传输多少个 码元

  • 在 UART / 串口 里,1 个码元 = 1 位(bit)

  • 所以, 波特率 = 每秒传输多少位(bit/s)

  • 常用波特率:9600 bit/s 115200 bit/s

1.4 数据帧

串口一个数据帧 = 1 起始位 + 8 数据位 + + (1 奇偶校验位) + 1 停止位

数据帧

  • 起始位:标志一个数据帧的开始,固定为低电平。(空闲状态为高电平)

  • 数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行(数据从低位到高位发送)

  • (校验位):用于数据验证,根据数据位计算得来,串口用的是奇偶校验法(无校验,奇校验,偶校验)

    • 校验:如果传输的数据是0000 1111 共4个1,是偶数个,那么校验位就需要在补一个1,变成0000 1111 1 保证1的个数为奇数
    • 校验:如果传输的数据是0000 1111 共4个1,是奇数个,那么校验位就需要在补一个0,变成0000 1111 0 保证1的个数为偶数
  • 停止位:用于数据帧间隔,固定为高电平

1.5 USART外设结构

USART外设结构

看起来很复杂, 我们把它分成3个部分去看就简单多了

1 部分:数据通路

这部分是 USART 的数据收发主干道,负责「CPU ↔ USART ↔ 外部引脚」的数据传输。

  • 发送

    • TDR Transmit Data Register(发送数据寄存器):CPU/DMA 将要发送的数据并行写入这里。

    • TSR Transmit Shift register(发送移位寄存器): 把并行数据转成串行比特流,然后一位一位按波特率从 TX 引脚发出去

  • 接收

    • RSR Receive Shift register(接收移位寄存器): 把串行比特流数据,按波特率采样,拼成完整的字节,再送到 RDR

    • RDR Receive Data Register(接收数据寄存器):接收移位寄存器拼好的字节,先存在这里,再由CPU/DMA 读取

2 部分:控制与状态

  • 控制

    • CR1 Control Register 1 (控制寄存器1): USART 模块使能, 发送 / 接收使能, 数据位宽(8/9 位),奇偶校验使能, 中断使能

    • CR2 Control Register 2 (控制寄存器2):帧格式与同步模式控制, STOP:停止位配置(1/2 位)

    • CR3 Control Register 3 (控制寄存器3):发送 / 接收 DMA 使能, RTS/CTS 硬件流控使能, 红外模式配置, 半双工模式使能

  • 状态

    • SR Status Register(状态寄存器):
      • 数据写入 TDR → TXE 标志置 1 → 数据自动进入发送移位寄存器 → 按波特率从 TX 引脚发出
      • 数据写入 RDR → RXNE 标志置 1 → CPU 读取数据

3 部分:波特率

  • BRR Baud Rate Register(波特率配置寄存器):用来配置波特率的分频系数, 最终生成发送和接收的采样时钟

2 USART 常用寄存器

3 USART 常用函数

4 串口通信实验